home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Visual Cafe Pro v1.0 / TUTORIAL.BIN / Calendar.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-16  |  7.1 KB  |  377 lines

  1. package symantec.itools.awt.util;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Event;
  8. import java.awt.Font;
  9. import java.awt.FontMetrics;
  10. import java.awt.Graphics;
  11. import java.awt.LayoutManager;
  12. import java.awt.Panel;
  13. import java.awt.Rectangle;
  14. import java.util.Date;
  15. import symantec.itools.awt.ComboBox;
  16. import symantec.itools.awt.NumericSpinner;
  17.  
  18. public class Calendar extends Panel {
  19.    private ComboBox combo;
  20.    private boolean bNeedsPlatformHelp;
  21.    // $FF: renamed from: sc symantec.itools.awt.NumericSpinner
  22.    private NumericSpinner field_0;
  23.    private Date dCurrent;
  24.    private Date dLast;
  25.    private Color selectedColor;
  26.    private String[][] cal;
  27.    private int dateSelectedx;
  28.    private int dateSelectedy;
  29.    private int lastSelectedDate;
  30.    private int maxMonthx;
  31.    private int maxMonthy;
  32.    private int firstDay;
  33.    private int topRow;
  34.    private int selectHeight;
  35.    private int centerNumber;
  36.    private int heightAdjust;
  37.    private int numberAdjust;
  38.  
  39.    public Calendar() {
  40.       this(new Date());
  41.    }
  42.  
  43.    public Calendar(Date var1) {
  44.       this.dateSelectedx = -1;
  45.       this.dateSelectedy = -1;
  46.       this.lastSelectedDate = -1;
  47.       this.maxMonthx = -1;
  48.       this.maxMonthy = -1;
  49.       this.firstDay = -1;
  50.       this.topRow = -1;
  51.       this.selectHeight = -1;
  52.       this.centerNumber = -1;
  53.       this.heightAdjust = -1;
  54.       this.numberAdjust = -1;
  55.       ((Container)this).setLayout((LayoutManager)null);
  56.       this.bNeedsPlatformHelp = ComboBox.needsPlatformHelp();
  57.       this.dCurrent = var1;
  58.       this.dLast = this.dCurrent;
  59.       this.combo = new ComboBox();
  60.       this.combo.addItem("January");
  61.       this.combo.addItem("February");
  62.       this.combo.addItem("March");
  63.       this.combo.addItem("April");
  64.       this.combo.addItem("May");
  65.       this.combo.addItem("June");
  66.       this.combo.addItem("July");
  67.       this.combo.addItem("August");
  68.       this.combo.addItem("September");
  69.       this.combo.addItem("October");
  70.       this.combo.addItem("November");
  71.       this.combo.addItem("December");
  72.       ((Container)this).add(this.combo);
  73.       this.field_0 = new NumericSpinner();
  74.       ((Container)this).add(this.field_0);
  75.       this.field_0.setMin(1900);
  76.       this.field_0.setMax(9999);
  77.       this.field_0.setCurrent(1900 + this.dCurrent.getYear());
  78.       this.field_0.setEditable(false);
  79.       this.combo.select(this.dCurrent.getMonth());
  80.       this.selectedColor = Color.blue;
  81.       if (this.bNeedsPlatformHelp) {
  82.          ((Component)this).setFont(new Font("Dialog", 0, 9));
  83.       } else {
  84.          ((Component)this).setFont(new Font("Dialog", 1, 10));
  85.       }
  86.    }
  87.  
  88.    public String getDate() {
  89.       return this.dCurrent.toString();
  90.    }
  91.  
  92.    public void setDate(String var1) {
  93.       try {
  94.          this.dCurrent = new Date(var1);
  95.       } catch (Exception var2) {
  96.          this.dCurrent = new Date();
  97.       }
  98.  
  99.       ((Component)this).invalidate();
  100.    }
  101.  
  102.    public Color getSelectedColor() {
  103.       return this.selectedColor;
  104.    }
  105.  
  106.    public void setSelectedColor(Color var1) {
  107.       this.selectedColor = var1;
  108.       ((Component)this).invalidate();
  109.    }
  110.  
  111.    public boolean handleEvent(Event var1) {
  112.       byte var2 = -1;
  113.       switch (var1.id) {
  114.          case 501:
  115.             if (this.bNeedsPlatformHelp) {
  116.                var2 = 70;
  117.                this.centerNumber = 14;
  118.                this.heightAdjust = 6;
  119.                this.numberAdjust = 6;
  120.             } else {
  121.                var2 = 40;
  122.                this.centerNumber = 12;
  123.                this.heightAdjust = 2;
  124.                this.numberAdjust = 0;
  125.             }
  126.  
  127.             Rectangle var3 = ((Component)this).bounds();
  128.             int var4 = (var3.height - var2 - 14) / 7;
  129.             int var5 = (var3.width - 32) / 7;
  130.             if (var1.x >= 15 && var1.x < var3.width - 15 && var1.y >= var2 + var4 && var1.y < var3.height - 14) {
  131.                this.dateSelectedx = (var1.x - 16) / var5;
  132.                this.dateSelectedy = (var1.y - var2 - var4) / var4;
  133.                ((Component)this).repaint();
  134.                this.firstDay = -1;
  135.             }
  136.             break;
  137.          case 1001:
  138.             if (var1.target instanceof ComboBox) {
  139.                int var6 = this.dCurrent.getDate();
  140.                int var7 = this.combo.getSelectedIndex();
  141.                int var8 = this.dCurrent.getYear();
  142.  
  143.                for(this.dCurrent = new Date(var8, var7, var6); this.dCurrent.getMonth() != var7; this.lastSelectedDate = -1) {
  144.                   --var6;
  145.                   this.dCurrent = new Date(var8, var7, var6);
  146.                }
  147.  
  148.                this.firstDay = -1;
  149.                ((Component)this).repaint();
  150.             }
  151.  
  152.             if (var1.target == this.field_0) {
  153.                int var10 = this.dCurrent.getDate();
  154.                int var11 = this.dCurrent.getMonth();
  155.                int var12 = this.field_0.getCurrent() - 1900;
  156.  
  157.                for(this.dCurrent = new Date(var12, var11, var10); this.dCurrent.getMonth() != var11; this.lastSelectedDate = -1) {
  158.                   --var10;
  159.                   this.dCurrent = new Date(var12, var11, var10);
  160.                }
  161.  
  162.                this.firstDay = -1;
  163.                ((Component)this).repaint();
  164.             }
  165.       }
  166.  
  167.       return super.handleEvent(var1);
  168.    }
  169.  
  170.    boolean isLeapYear(int var1) {
  171.       return var1 % 4 == 0 && var1 != 2100;
  172.    }
  173.  
  174.    public void reshape(int var1, int var2, int var3, int var4) {
  175.       this.field_0.reshape(var3 - 100, 7, 100, 30);
  176.       super.reshape(var1, var2, var3, var4);
  177.    }
  178.  
  179.    public void update(Graphics var1) {
  180.       this.paint(var1);
  181.    }
  182.  
  183.    public void paint(Graphics var1) {
  184.       this.field_0.setBackground(((Component)this).getBackground());
  185.       this.field_0.repaint();
  186.       FontMetrics var2 = ((Component)this).getFontMetrics(((Component)this).getFont());
  187.       Rectangle var3 = ((Component)this).bounds();
  188.       if (this.bNeedsPlatformHelp) {
  189.          this.combo.reshape(12, 20, 100, 34);
  190.          this.topRow = 70;
  191.          this.selectHeight = var2.getHeight() + 2;
  192.          this.centerNumber = 14;
  193.          this.heightAdjust = 6;
  194.          this.numberAdjust = 6;
  195.       } else {
  196.          this.combo.reshape(12, 10, 100, 25);
  197.          this.topRow = 40;
  198.          this.selectHeight = var2.getHeight();
  199.          this.centerNumber = 12;
  200.          this.heightAdjust = 2;
  201.          this.numberAdjust = 0;
  202.       }
  203.  
  204.       int var4 = (var3.width - 32) / 7;
  205.       int var5 = (var3.height - this.topRow - 16) / 7;
  206.       int var6 = var4 - var2.stringWidth("S") / 2;
  207.       int var7 = this.topRow + this.centerNumber;
  208.       if (this.dateSelectedx < 0) {
  209.          var1.setColor(Color.black);
  210.          var1.drawLine(15, this.topRow, var3.width - 17, this.topRow);
  211.          var1.setColor(Color.lightGray);
  212.          var1.drawLine(15, this.topRow + 7 * var5, var3.width - 18, this.topRow + 7 * var5);
  213.          var1.setColor(Color.white);
  214.          var1.drawLine(16, this.topRow + 1 + 7 * var5, var3.width - 17, this.topRow + 1 + 7 * var5);
  215.          var1.setColor(Color.black);
  216.          var1.drawLine(15, this.topRow, 15, this.topRow + 7 * var5);
  217.          var1.setColor(Color.lightGray);
  218.          var1.drawLine(var3.width - 17, this.topRow, var3.width - 17, this.topRow + 7 * var5);
  219.          var1.setColor(Color.white);
  220.          var1.drawLine(var3.width - 16, this.topRow, var3.width - 16, this.topRow + 7 * var5);
  221.          var1.fillRect(16, this.topRow + var5, var3.width - 33, 6 * var5 + 1);
  222.          var1.setColor(Color.gray);
  223.          var1.fillRect(16, this.topRow + 1, var3.width - 32, var5 - 2);
  224.          var1.setColor(Color.white);
  225.          var1.drawString("S", var6, var7 - 1);
  226.          var6 = 2 * var4 - var2.stringWidth("M") / 2;
  227.          var1.drawString("M", var6, var7 - 1);
  228.          var6 = 3 * var4 - var2.stringWidth("T") / 2;
  229.          var1.drawString("T", var6, var7 - 1);
  230.          var6 = 4 * var4 - var2.stringWidth("W") / 2;
  231.          var1.drawString("W", var6, var7 - 1);
  232.          var6 = 5 * var4 - var2.stringWidth("T") / 2;
  233.          var1.drawString("T", var6, var7 - 1);
  234.          var6 = 6 * var4 - var2.stringWidth("F") / 2;
  235.          var1.drawString("F", var6, var7 - 1);
  236.          var6 = 7 * var4 - var2.stringWidth("S") / 2;
  237.          var1.drawString("S", var6, var7 - 1);
  238.       }
  239.  
  240.       new Date(this.dCurrent.getYear(), this.dCurrent.getMonth(), 1);
  241.       Date var8 = new Date(this.dCurrent.getYear(), this.dCurrent.getMonth(), 1);
  242.       if (this.firstDay < 0) {
  243.          this.firstDay = var8.getDay();
  244.       }
  245.  
  246.       int var9 = -1;
  247.       int var10 = 1;
  248.       int var11 = -1;
  249.       int var12 = this.dCurrent.getMonth() + 1;
  250.       if (this.lastSelectedDate < 1) {
  251.          var9 = this.dCurrent.getDate();
  252.       } else if (this.dateSelectedx < 0) {
  253.          var9 = this.lastSelectedDate;
  254.       }
  255.  
  256.       var1.setColor(Color.black);
  257.  
  258.       label161:
  259.       for(int var13 = 0; var13 < 6; ++var13) {
  260.          for(int var14 = 0; var14 < 7; ++var14) {
  261.             if (this.maxMonthy < this.dateSelectedy || this.maxMonthy == this.dateSelectedy && this.maxMonthx < this.dateSelectedx) {
  262.                this.dateSelectedx = -1;
  263.                this.dateSelectedy = -1;
  264.                break label161;
  265.             }
  266.  
  267.             if (var13 == 0 && var14 < this.firstDay) {
  268.                if (this.dateSelectedx == var14 && this.dateSelectedy == var13) {
  269.                   this.dateSelectedx = -1;
  270.                   this.dateSelectedy = -1;
  271.                   break label161;
  272.                }
  273.             } else {
  274.                var6 = (var14 + 1) * var4 - var2.stringWidth(Integer.toString(var10)) / 2;
  275.                var7 = this.topRow + this.heightAdjust + 4 + this.numberAdjust + ((var13 + 2) * var5 - var2.getHeight());
  276.                if (this.dateSelectedx < 0 && var9 != var10) {
  277.                   if (var10 < 10) {
  278.                      var1.drawString(Integer.toString(var10), var6, var7);
  279.                   } else {
  280.                      var1.drawString(Integer.toString(var10), var6, var7);
  281.                   }
  282.                } else if ((this.dateSelectedx != var14 || this.dateSelectedy != var13) && var9 != var10) {
  283.                   if (var10 == this.lastSelectedDate) {
  284.                      var1.setColor(Color.white);
  285.                      if (var10 < 10) {
  286.                         var1.fillRect(var6, var7 - this.selectHeight + this.heightAdjust, var2.stringWidth(Integer.toString(var10)) + 2, this.selectHeight);
  287.                      } else {
  288.                         var1.fillRect(var6, var7 - this.selectHeight + this.heightAdjust, var2.stringWidth(Integer.toString(var10)), this.selectHeight);
  289.                      }
  290.  
  291.                      var1.setColor(Color.black);
  292.                      if (var10 < 10) {
  293.                         var1.drawString(Integer.toString(var10), var6, var7);
  294.                      } else {
  295.                         var1.drawString(Integer.toString(this.lastSelectedDate), var6, var7);
  296.                      }
  297.  
  298.                      this.lastSelectedDate = -1;
  299.                   }
  300.                } else {
  301.                   if (this.dateSelectedx == var14 && this.dateSelectedy == var13) {
  302.                      this.dCurrent = new Date(this.dCurrent.getYear(), this.dCurrent.getMonth(), var10);
  303.                      this.dCurrent = new Date(this.dCurrent.getYear(), this.dCurrent.getMonth(), var10);
  304.                   }
  305.  
  306.                   var1.setColor(this.selectedColor);
  307.                   if (var10 < 10) {
  308.                      var1.fillRect(var6, var7 - this.selectHeight + this.heightAdjust, var2.stringWidth(Integer.toString(var10)) + 2, this.selectHeight);
  309.                   } else {
  310.                      var1.fillRect(var6, var7 - this.selectHeight + this.heightAdjust, var2.stringWidth(Integer.toString(var10)), this.selectHeight);
  311.                   }
  312.  
  313.                   var1.setColor(Color.white);
  314.                   if (var10 < 10) {
  315.                      var1.drawString(Integer.toString(var10), var6, var7);
  316.                   } else {
  317.                      var1.drawString(Integer.toString(var10), var6, var7);
  318.                   }
  319.  
  320.                   var11 = var10;
  321.                   var1.setColor(Color.black);
  322.                }
  323.  
  324.                if (var10 >= 31) {
  325.                   this.maxMonthx = var14;
  326.                   this.maxMonthy = var13;
  327.                   break label161;
  328.                }
  329.  
  330.                if (var10 >= 30 && (var12 == 4 || var12 == 6 || var12 == 9 || var12 == 11)) {
  331.                   this.maxMonthx = var14;
  332.                   this.maxMonthy = var13;
  333.                   break label161;
  334.                }
  335.  
  336.                if (var10 >= 29 && var12 == 2) {
  337.                   this.maxMonthx = var14;
  338.                   this.maxMonthy = var13;
  339.                   break label161;
  340.                }
  341.  
  342.                if (var10 >= 28 && var12 == 2 && !this.isLeapYear(this.dCurrent.getYear())) {
  343.                   this.maxMonthx = var14;
  344.                   this.maxMonthy = var13;
  345.                   break label161;
  346.                }
  347.  
  348.                ++var10;
  349.             }
  350.          }
  351.       }
  352.  
  353.       if (this.lastSelectedDate < 0) {
  354.          this.lastSelectedDate = var11;
  355.       }
  356.  
  357.       this.dateSelectedx = -1;
  358.       this.dateSelectedy = -1;
  359.       if (!this.dLast.equals(this.dCurrent)) {
  360.          this.dLast = this.dCurrent;
  361.          Container var23 = ((Component)this).getParent();
  362.          if (var23 != null) {
  363.             ((Component)var23).postEvent(new Event(this, 1001, this.dCurrent));
  364.          }
  365.       }
  366.  
  367.    }
  368.  
  369.    public Dimension preferredSize() {
  370.       return new Dimension(250, 200);
  371.    }
  372.  
  373.    public Dimension minimumSize() {
  374.       return new Dimension(250, 200);
  375.    }
  376. }
  377.